/**
 * 
 */
package com.teamall.web.sjtj.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.teamall.core.common.Page;
import com.teamall.core.convert.IArgConversionService;
import com.teamall.core.idproduce.ISequenceGenerator;
import com.teamall.framework.exception.BaseAppException;
import com.teamall.framework.log.LogManager;
import com.teamall.framework.util.Utils;
import com.teamall.web.sjtj.db.arg.CodeVisitedAidRankArg;
import com.teamall.web.sjtj.db.arg.CodeVisitedAidRankArg.CodeVisitedAidRankCriteria;
import com.teamall.web.sjtj.db.dao.CodeVisitedAidRankDao;
import com.teamall.web.sjtj.db.po.CodeVisitedAidRankPO;
import com.teamall.web.sjtj.service.ICodeVisitedAidRankService;

/**
 * <Description> <br>
 * 
 * @author codeCreater<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2014年11月11日 <br>
 * @since V1.0<br>
 * @see com.teamall.web.sjtj.service.impl <br>
 */

@Service("codeVisitedAidRankService")
public class CodeVisitedAidRankServiceImpl implements ICodeVisitedAidRankService {

	private static final LogManager logger = LogManager
			.getLogger(CodeVisitedAidRankServiceImpl.class);

	@Autowired
	private CodeVisitedAidRankDao codeVisitedAidRankDao;

	/**
	 * 查询条件转换成Arg类的服务接口
	 */
	@Resource(name = "defaultArgConversionService")
	private IArgConversionService argConversionService;

	/**
	 * 主键生成器
	 */
	@Resource(name = "sequenceProcGenerator")
	private ISequenceGenerator sequenceGenerator;

	@Override
	public CodeVisitedAidRankPO selectByPrimaryKey(String key) throws BaseAppException {
		// ///////
		// TODO 根据业务场景，设置查询条件、数据校验等

		// ///////
		return codeVisitedAidRankDao.selectByPrimaryKey(key);
	}

	@Override
	public List<CodeVisitedAidRankPO> selectByArg(CodeVisitedAidRankPO record)
			throws BaseAppException {
		logger.debug("selectByArg begin...record={0}", record);

		// 第一种方式：自己创建arg，自行设置查询条件及操作符
		CodeVisitedAidRankArg arg = new CodeVisitedAidRankArg();
		CodeVisitedAidRankCriteria criteria = arg.createCriteria();

		// ///////
		// TODO 根据业务场景，设置查询条件，示例
		if (Utils.notEmpty(record.getTownId())) {
			criteria.andTownIdEqualTo(record.getTownId());
		}
		if (Utils.notEmpty(record.getVillageId())) {
			criteria.andVillageIdEqualTo(record.getVillageId());
		}
		if (Utils.notEmpty(record.getVtime())) {
			criteria.andVtimeEqualTo(record.getVtime());
		}
		// ///////
		arg.setOrderByClause(" visited_count_sum desc ");
		return codeVisitedAidRankDao.selectByArg(arg);
	}

	@Override
	public Page<CodeVisitedAidRankPO> selectByArgAndPage(CodeVisitedAidRankPO record,
			Page<CodeVisitedAidRankPO> resultPage) throws BaseAppException {
		logger.debug("selectByArgAndPage begin...record={0}", record);

		// 第一种方式：自己创建arg，自行设置查询条件及操作符
		CodeVisitedAidRankArg arg = new CodeVisitedAidRankArg();
		//TODO 根据业务场景，设置查询条件，示例
		CodeVisitedAidRankCriteria criteria = arg.createCriteria();
		if (Utils.notEmpty(record.getTownId())) {
			criteria.andTownIdEqualTo(record.getTownId());
		}
		if (Utils.notEmpty(record.getVillageId())) {
			criteria.andVillageIdEqualTo(record.getVillageId());
		}
		if (Utils.notEmpty(record.getVtime())) {
			criteria.andVtimeEqualTo(record.getVtime());
		}
		
		arg.setOrderByClause(" visited_count_sum desc ");
		resultPage = codeVisitedAidRankDao.selectByArgAndPage(arg, resultPage);

		return resultPage;
	}

	@Override
	public int add(CodeVisitedAidRankPO record) throws BaseAppException {
		logger.debug("add begin...record={0}", record);

		// ///////
		// TODO 根据业务场景，进行重名校验、设置主键、设置属性默认值等
		// 获取主键
		// int pkId = sequenceGenerator.sequenceIntValue("表名","主键名");
		// record.setUserId(pkId);
		// record.setCreatedDate(new Date());
		// ///////

		return codeVisitedAidRankDao.insertSelective(record);
	}

	@Override
	public int update(CodeVisitedAidRankPO record) throws BaseAppException {
		logger.debug("update begin...record={0}", record);

		// ///////
		// TODO 根据业务场景，进行重名校验、数据有效性校验、设置属性默认值等

		// ///////

		return codeVisitedAidRankDao.updateByPrimaryKeySelective(record);
	}

	@Override
	public int delete(CodeVisitedAidRankPO record) throws BaseAppException {
		logger.debug("delete begin...record={0}", record);

		// ///////
		// TODO 根据业务场景，进行关联性校验、关联删除等

		// ///////

		return codeVisitedAidRankDao.deleteByPrimaryKey(record.getVid());
	}

}
